<?php  if (!defined('BASEPATH')) exit('No direct script access allowed');

/**
 * Помошник для работы с директориями
 * 
 * @package CoreFramework
 * @version 1.0
 * @author Gennadiy Kozlenko
 */

/**
 * Копирование содержимого одной директории в другую
 *
 * @access public
 * @param string $source
 * @param string $target
 * @param boolean $override
 * @return boolean
 */
function copy_directory($source, $target, $override = false) {
   $source = rtrim($source, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR;
   $target = rtrim($target, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR;
   if (false !== ($dh = opendir($source))) {
      while (false !== ($file = readdir($dh))) {
      	if (!in_array($file, array('.', '..')) && 0 !== strpos($file, '.')) {
      	   if (is_dir($source . $file)) {
      	      if (!file_exists($target . $file)) {
      	         if (mkdir($target . $file)) {
      	            @chmod($target . $file, 0777);
      	         } else {
      	            return false;
      	         }
      	      }
      	      if (!copy_directory($source . $file, $target . $file, $override)) {
      	         return false;
      	      }
      	   } else {
      	      if ($override || !file_exists($target . $file)) {
         	      @copy($source . $file, $target . $file);
         	      @chmod($target . $file, 0777);
      	      }
      	   }
      	}
      }
      closedir($dh);
   }
   return true;
} // end copy_directory

/**
 * Рекурсивный чмод
 *
 * @param string $dir
 * @param integer $mode
 * @param integer $dir_mode
 */
function chmod_reclusive($dir, $mode, $dir_mode = null) {
   if (null === $dir_mode) {
      $dir_mode = $mode;
   }
   $dir = rtrim($dir, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR;
   @chmod($dir, $dir_mode);
   if (false !== ($dh = opendir($dir))) {
      while (false !== ($file = readdir($dh))) {
         if (!in_array($file, array('.', '..')) && 0 !== strpos($file, '.')) {
            if (is_dir($dir . $file)) {
               chmod_reclusive($dir . $file, $mode, $dir_mode);
            } else {
               @chmod($dir . $file, $mode);
            }
         }
      }
      closedir($dh);
   }
} // end chmod_reclusive

/**
 * Рекурсивное удаление директории
 *
 * @param string $dir
 */
function rmdir_recursive($dir) {
   $dir = rtrim($dir, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR;
   if (false !== ($dh = opendir($dir))) {
      while (false !== ($file = readdir($dh))) {
         if (!in_array($file, array('.', '..'))) {
            if (is_dir($dir . $file)) {
               rmdir_recursive($dir . $file);
            } else {
               @unlink($dir . $file);
            }
         }
      }
      closedir($dh);
   }
   @rmdir($dir);
}
